/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package AccesoDatos.Fabricas;

import AccesoDatos.IDAO.IDAOArchivo;
import AccesoDatos.IDAO.IDAOConfiguracion;
import AccesoDatos.IDAO.IDAOUsuario;
import ObjetoDominio.Servidor;

/**
 *Fabrica para los daos
 * @author familia
 */
public abstract class DAO {
    
    public static enum Opciones {
        socket, RMI, WebServices, Local
    }
    
    public static DAO ObtenerDAO(Opciones opcion){
        
        switch(opcion){
            
            case socket: return new DAOSocket();
            case Local: return new DAOLocal(); 
            case RMI: return null;
            case WebServices: return null;
            
            default: return null;
        }
    }
    
    /**
     * Metodo que devuelve el objeto para las acciones sobre los archivos
     * @param servidor datos del servidor para la comunicacion
     * @return 
     */
    public abstract IDAOArchivo ObtenerDAOArchivo(Servidor servidor);
    
    /**
     * Metodo que devuelve el objeto dao para las acciones sobre los usuarios
     * @param usuario credenciales del usuario
     * @return 
     */
    public abstract IDAOUsuario ObtenerDAOUsuario(Servidor servidor);
    
    /**
     * Metodo que devuelve el objeto dao para obtener la configuracion inicial
     * @return 
     */
    public abstract IDAOConfiguracion ObtenerDAOConfiguracion();
}
